package Niuke;

//这个题也是永远的通，突然想到，再写一遍，循环打印123

//其实多线程同步问题的重点就是，基本就是这个模版
 /* syn(o){
      while(条件不符合)
            o.wait
       做相应操作
       更新条件
       o.notifyAll();
          }

  */
public class xunhuandayin {

    static volatile int flag=1;
    static Object o=new Object();

    public static void main(String[] args) {
        new Thread(()->{
            for (int i=0;i<5;i++){
                synchronized (o){
                    while (flag!=1) {
                        try {
                            o.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    System.out.println("1");
                    flag=2;
                    o.notifyAll();
                }
            }
        }).start();
        new Thread(()->{
            for (int i=0;i<5;i++){
                synchronized (o){
                    while (flag!=2) {
                        try {
                            o.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    System.out.println("2");
                    flag=3;
                    o.notifyAll();
                }
            }
        }).start();
        new Thread(()->{
            for (int i=0;i<5;i++){
                synchronized (o){
                    while (flag!=3) {
                        try {
                            o.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    System.out.println("3");
                    flag=1;
                    o.notifyAll();
                }
            }
        }).start();
    }
}
